package com.ym.medical.service;

import com.alibaba.fastjson.JSONObject;
import com.ym.medical.domain.bo.pay.WxApplyPaySign;
import com.ym.medical.domain.bo.pay.WxOrderQueryRespData;
import com.ym.medical.domain.bo.pay.WxRefundQueryRespData;
import com.ym.medical.enums.PlaformSourceEnum;
import com.ym.medical.enums.WxTradeTypeEnum;

import java.math.BigDecimal;

/**
 * 微信支付相关
 */
public interface IWxPaySV {
    /**
     * 微信支付请求申请
     *
     * @param openId      用户的openid
     * @param outTradeNo  订单号
     * @param tradeType   交易类型 (必填项 JSAPI--JSAPI支付（或小程序支付）、NATIVE--Native支付、APP--app支付，MWEB--H5支付)
     * @param desc        商品描述
     * @param totalMoney  退款金额
     * @param callbackUrl 返回的url
     * @return
     */
    WxApplyPaySign.SignData payApply(String openId, String outTradeNo, WxTradeTypeEnum tradeType, String desc, BigDecimal totalMoney, String callbackUrl);

    /**
     * 微信退费申请
     *
     * @param outTradeNo  订单号
     * @param tradeType   交易类型 (必填项 JSAPI--JSAPI支付（或小程序支付）、NATIVE--Native支付、APP--app支付，MWEB--H5支付)
     * @param totalMoney  退款金额
     * @param outRefundNo 商户退款单号
     * @param callbackUrl 返回的url
     * @return
     */
    JSONObject refundApply(String outTradeNo, WxTradeTypeEnum tradeType, String outRefundNo, BigDecimal totalMoney, String callbackUrl);

    /**
     * 微信提现申请
     *
     * @param openId      用户的openid
     * @param outTradeNo  订单号
     * @param tradeType   交易类型 (必填项 JSAPI--JSAPI支付（或小程序支付）、NATIVE--Native支付、APP--app支付，MWEB--H5支付)
     * @param totalMoney  提现金额
     * @return
     */
    void withdrawApply(String openId, String outTradeNo, WxTradeTypeEnum tradeType, BigDecimal totalMoney);


    /**
     * 微信交易订单查询
     *
     * @param plaformSourceEnum      平台来源
     * @param outTradeNo  订单号
     * @return
     */
    WxOrderQueryRespData payOrderQuery(PlaformSourceEnum plaformSourceEnum, String outTradeNo);

    /**
     * 微信退费订单查询
     *
     * @param plaformSourceEnum      平台来源
     * @param outTradeNo  订单号
     * @return
     */
    WxRefundQueryRespData refundOrderQuery(PlaformSourceEnum plaformSourceEnum, String outTradeNo);

}
